package com.itheima.security.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

/**
 * @author 黑马程序员
 * @Company http://www.ithiema.com
 * @Version 1.0
 */
@Configuration
@EnableWebSecurity // 开启 web 认证
//开启 方法注解授权 （prePostEnabled = true： 允许使用 @PreAuthorize(方法执行前校验), @PostAuthorize（方法执行后校验））
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    public BCryptPasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }


//    @Bean
//    protected UserDetailsService userDetailsService() {
//        InMemoryUserDetailsManager inMemoryUserDetailsManager = new InMemoryUserDetailsManager();
//        //构建 用户对象
//        UserDetails userDetails = User.withUsername("itheima").password(passwordEncoder().encode("123456")).authorities("ROLE_ADMIN", "P1").build();
//        inMemoryUserDetailsManager.createUser(userDetails);
//
//        UserDetails userDetails1 = User.withUsername("itcast").password(passwordEncoder().encode("123456")).authorities("ROLE_USER", "O1").build();
//        inMemoryUserDetailsManager.createUser(userDetails1);
//
//        return inMemoryUserDetailsManager;
//    }


    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.formLogin() //配置表单登录（表单的默认路径是 /login ）
            .and().csrf().disable() //关闭跨站请求伪造
            .logout() //退出功能 (默认路径是： /logout)
            .and().authorizeRequests() //配置请求路径
            .antMatchers("/register").permitAll() // antMatchers 配置请求路径  permitAll()： 开放权限（不登录也可以访问）
//            .antMatchers("/hello").hasRole("ADMIN") //必须拥有 某角色才可以访问(hasRole 前缀默认 ROLE_ ，必须全大写)
//            .antMatchers("/say").hasAuthority("O1") //必须用户某权限才可以访问
            .anyRequest().authenticated(); //其他请求，只要认证了就可以访问
    }
}
